package com.xinke.edu.mypetadoption.net;

import com.xinke.edu.mypetadoption.entity.DashboardDTO;
import com.xinke.edu.mypetadoption.entity.Merchant;
import com.xinke.edu.mypetadoption.entity.MerchantInfoDTO;
import com.xinke.edu.mypetadoption.entity.Orders;
import com.xinke.edu.mypetadoption.entity.OrdersUserProductDTO;
import com.xinke.edu.mypetadoption.entity.Product;
import com.xinke.edu.mypetadoption.entity.ProductCategory;
import com.xinke.edu.mypetadoption.entity.ProductInfoDTO;
import com.xinke.edu.mypetadoption.entity.ResultBody;
import com.xinke.edu.mypetadoption.entity.User;

import java.util.List;

import io.reactivex.rxjava3.core.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

public interface ApiService {

    String BaseURL="http://192.168.75.136:8080/";
    //String BaseURL = "http://10.0.10.2:8080/";

    //分类
    @GET("productCategory/getProductCat")
    Observable<ResultBody<List<ProductCategory>>> getType();

    //登录
    @FormUrlEncoded
    @POST("user/login")
    Observable<ResultBody<User>> login(@Field("username") String username, @Field("password") String password);

    //注册
    @POST("user/register")
    Observable<ResultBody> register(@Body User user);

    //修改密码
    @FormUrlEncoded
    @POST("user/updatepass")
    Observable<ResultBody> changePassword(@Field("id") int id, @Field("password") String password);

    //获取未审核资质的商家
    @GET("merchant/selAccreditation")
    Observable<ResultBody<List<Merchant>>> selAccreditation();

    //设置商家审核状态
    @FormUrlEncoded
    @POST("merchant/setAccreditation")
    Observable<ResultBody> setAccreditation(@Field("id") int id, @Field("key") int key);

    //根据商家id查找所有商品
    @FormUrlEncoded
    @POST("/product/spProduct")
    Observable<ResultBody<List<Product>>> spProduct(@Field("id") String id);

    //根据商家id查询所有订单
    @FormUrlEncoded
    @POST("orders/selectOrdersMerchant")
    Observable<ResultBody<List<OrdersUserProductDTO>>> selectOrdersMerchant(@Field("id") long id);

    //根据用户id查找商家信息
    @FormUrlEncoded
    @POST("user/merchantInfo")
    Observable<ResultBody<MerchantInfoDTO>> getMerchantInfo(@Field("id") int id);


    //根据用户id查询订单
    @FormUrlEncoded
    @POST("orders/selectOrdersUser")
    Observable<ResultBody<List<Orders>>> selectOrdersUser(@Field("id")int id);


    //管理员获取数据统计
    @GET("merchant/dashboard")
    Observable<ResultBody<DashboardDTO>> getDashboard();

    //管理获取所有商品状态
    @GET("product/infoProduct")
    Observable<ResultBody<List<ProductInfoDTO>>> getInfoProduct();

    //模糊搜索商品
    @FormUrlEncoded
    @POST("product/selectProduct")
    Observable<ResultBody<List<Product>>> getProduct(@Field("keyword") String keyword, @Field("categoryId") int categoryId, @Field("pageIndex") int pageIndex, @Field("pageSize") int pageSize);

    //获取单个商品详情
    @FormUrlEncoded
    @POST("product/oneProduct")
    Observable<ResultBody<Product>> getProductDetail(@Field("id") String id);
    
    //删除商品
    @FormUrlEncoded
    @POST("product/deleteProduct")
    Observable<ResultBody> deleteProduct(@Field("id") String id);
    
    //发布商品
    @Multipart
    @POST("product/addProduct")
    Observable<ResultBody> publishProduct(@Part("merchantId") Long merchantId,
                                         @Part("name") RequestBody name,
                                         @Part("categoryId") int categoryId,
                                         @Part("price") double price,
                                         @Part("stock") int stock,
                                         @Part("description") RequestBody description,
                                         @Part MultipartBody.Part image);
}
